*******************************************************************************
●ドキュメント種別      ：3ndSTEP(94-08-22) -> 3rdSTEP(1994-11-11) 変更点
●対象ライブラリ記号名称：dma
●対象ライブラリ名称    ：DMA
●バージョン　　        ：1.04
●作成者                ：N.T
●作成日                ：1994-11-11
●その他のメッセージ    ：なし
*******************************************************************************

※Ver1.02からVer1.03は個別対応で配布したものです。

///////////////////////////////////////////////////////////////////////////////
◆変更バージョンへの移行作業時の注意
///////////////////////////////////////////////////////////////////////////////
    ！！重要！！
        ヘッダファイルを変更していますので、ヘッダファイルをインクルードしてい
        るユーザプログラムを必ずリコンパイルしてください。

///////////////////////////////////////////////////////////////////////////////
◆変更履歴
///////////////////////////////////////////////////////////////////////////////
    ●1994-09-23 Ver1.02
    ●1994-10-12 Ver1.03
    ●1994-11-11 Ver1.04
    ●1994-11/14 Ver1.04a H.O

///////////////////////////////////////////////////////////////////////////////
◆変更詳細  Ver.1.04a
///////////////////////////////////////////////////////////////////////////////
■DMA要求/応答選択制御レジスタへの外部リクエスト指定の禁止への対策。
    ライブラリでは指定が可能なので、以下のように修正。
     1) ヘッダファイルsega_dma.hからDMA_CPU_DREQマクロを削除。
     2) ファイルdma_cpu0.cのレジスタ設定関数DMA_CpuSetPrm内部で引き数の
        チェックを行い、DMA_CPU_RXIとDMA_CPU_TXI以外は設定しないように修正。

///////////////////////////////////////////////////////////////////////////////
◆変更詳細　Ｖｅｒ１．０４
///////////////////////////////////////////////////////////////////////////////
■コンパイルオプションの変更
        ライブラリのコンパイルオプションの/SPを/NOSPへ変更しました。理由は、/SP
        でコンパイルすると関数がインライン展開されてしまうのでデバッグ時に混乱
        を招く恐れがあるためです。

///////////////////////////////////////////////////////////////////////////////
◆変更詳細　Ｖｅｒ１．０３
///////////////////////////////////////////////////////////////////////////////
■不良対策
    Ver1.02(1994-09-30)の不良対策を以下のように行いました。

    ●共通
        ●1.マニュアル記述のDMAパラメータのマスク項目内容が誤っていた。
            ＜不良内容＞
            マニュアルには「DMAのマスク定数を指定したビットはレジスタへの設定
            をしない。」と誤って記述していた。
            
            ＜対策方法＞
            正しくは、「DMAのマスク定数を指定しなかったビットはレジスタへの設定
            をしない。」である。
            
    ●高水準SCU DMA
        ●1.DMA_ScuResult()をDMA_ScuMemCopy()の前に実行しても正しい値を返さな
            い。
            ＜不良内容＞
            DMA_ScuResult()をDMA_ScuMemCopy()の前に実行しても正しい値を返さな
            い。
            
            ＜対策方法＞
            正しい値を返すように修正した。

    ●低水準SCU DMA
        ●1.DMA終了割り込みのベクタを元に戻していない。
            ＜不良内容＞
            DMAの開始時にDMA終了割込みのベクタを退避している。しかしDMA終了後
            に退避しているベクタを再登録していなかった。

            ＜対策＞
            各チャネルDMA終了割込み処理中で退避しているベクタを再登録した。
            
        ●2.DMAパラメータのマスクが正しく指定できない。
            ＜不良内容＞
            DMAのパラメータのマスク定数の設定に関係なく、DXR（読み込みアドレス
            レジスタ）への設定を無条件に行うようになっていた。
            
            ＜対策方法＞
            マスク定数を正しく変更した。
            
        ●3.DMA_ScuAllStopはハード的に使用できないのにライブラリに存在していた

            ＜不良内容＞
            DMA_ScuAllStopで使用しているDMA強制終了レジスタはSCUのハードウェア
            制限により使用禁止であるにもかかわらず、存在していた。

            ＜対策方法＞
            この関数を削除した。
            
        ●4.DMA_ScuStopはハード的に使用できないのにライブラリに存在していた。
            ＜不良内容＞
            DMA_ScuStopはハード的な機能が存在しないのにもかかわらず、存在して
            いた。

            ＜対策方法＞
            この関数を削除した。
            
    ●低水準CPU DMA
        ●1.DMAパラメータのマスクが正しく指定できない。
            ＜不良内容＞
            DMAの共通パラメータのマスク定数の設定に関係なく、PR（プライオリテ
            ィモード）への設定を無条件に行うようになっていた。又、DMAのパラメ
            ータのマスク定数の設定に関係なく、SAR（DMAソースアドレス）への設定
            を無条件に行うようになっていた。
            
            ＜対策方法＞
            マスク定数を正しく変更した。
            
■マニュアルへの追加
    ●低水準SCU DMA
        ●低水準SCU DMAを使用する場合、使用するチャネルに対応したDMA終了割込み
        　マスクレジスタを許可すること
        　
■サンプルプログラムの修正
    本バージョンで動作するように変更した。
        SMPDMA10.C
        SMPDMA12.C

///////////////////////////////////////////////////////////////////////////////
◆変更詳細　Ｖｅｒ１．０２
///////////////////////////////////////////////////////////////////////////////
■不良対策
    3rdSTEPの不良の対策を以下のように行いました。以下の不良は何れも「SCU」の
    DMAです。

        ●1.sega_dma.libへのデバッグプログラム混在、デバッグ情報付加の不良対策
            ＜不良内容＞
            sega_dma.libへ誤ってデバッグプログラムを混在させていました。このデ
            バッグプログラムが6060000番地付近にWRITEしていました。また、コンパ
            イルオプションに/debを指定していたためデバッグ情報が付加され、sega_
            dma.libが必要以上に大きくなっていました。
            
            ＜対策＞
            (1)コンパイルをやり直しました。
            (2)dma.bat dma.mkを正しく修正しました。
            
        ●2.ハード的に使用禁止の割り込みステータスレジスタを使用している不良対
        　　策
            ＜不良内容＞
            ハード的に使用禁止の割り込みステータスレジスタをライブラリ内で使用
            していました。（割り込みステータスレジスタへのWRITEのタイミングに
            よっては、割り込み信号をとれない場合があります。これはハード的に使
            用禁止です。）
            
            ＜対策方法＞
            ライブラリ内で割り込みステータスレジスタを使用しないようにしました
            。代替えとして割り込み処理を使用するようにしました。
            これによりDMAライブラリに以下の仕様変更が発生しました。
            　DMA SCUライブラリでは、DMA終了割り込み処理を使用するため、V-BLANK
            IN割り込み処理内等、DMAより優先順位の高い割り込み処理内でDMA SCUを
            実行すると割り込み優先順位の高い割り込み処理の終了までDMAの終了を待
            ってしまいます。この待ちを防ぐ方法は次の2つの方法があります。
                (1)SCU DMAはメイン処理で行う。
                (2)割り込み優先順位を変更する。
            
            (2)の割り込み優先順位の推奨方法は別途ご連絡いたします。

            ＜仕様変更内容＞
            (1)SCU DMA高水準
                次の関数仕様を追加しました。
                    
                    +-----------------------------------------------------+
                    | 関数仕様 | SCU DMA初期化  | DMA_ScuInit             |
                    +-----------------------------------------------------+
                    書式    void DMA_ScuInit(void)
                    入力    なし
                    出力    なし
                    関数値  なし
                    機能    SCU DMAの初期化をします。DMA_ScuCopyMem(),
                    DMA_ScuResult()を実行する前に必ず行ってください。
                    !!注意!!
                            SCU DMAでは、DMAモード0の転送終了割り込み処理を使
                            用しています。よって、DMAモード0の転送終了割り込み
                            の割り込みマスクレジスタは、変更しないでください。
                    
            (2)SCU DMA低水準
                次の関数仕様、データ仕様を追加しました。

                    +-----------------------------------------------------+
                    | 関数仕様 | DMAステータス取得 | DMA_ScuGetStatus     |
                    +-----------------------------------------------------+
                    書式    void DMA_ScuGetStatus(DmaScuStatus *status,
                                                                Uint32 ch)
                    入力    ch  ：入力チャネル
                    出力    status ：ステータスポインタ
                    関数値  なし
                    機能    指定されたDMAチャネルのステータスを取得します。
                    !!注意!!
                            2ndSTEPに同様の関数がありました。しかし本バージョ
                            ンとでは以下の違いがあります。
                            
                            DmaScuStatus構造体のメンバ、dxbk（DMA中断中フラグ
                            ）・dxwt（DMA待機中フラグ）を削除しました。

                    +-----------------------------------------------------+
                    | データ仕様 | ステータス        | DmaScuStatus       |
                    +-----------------------------------------------------+
                    ステータスは以下のような構造体です。
                    
                    struct {
                        Uint32 dxmv;
                    }
                    
                    以下に、この各メンバで使用できる定数を示します。
                    
                        dxmv /* DMA動作フラグ */
                        +-------------------------------------------------+
                        |定数           |説明                             |
                        +-------------------------------------------------+
                        | DMA_SCU_MV    |動作中                           |
                        | DMA_SCU_NO_MV |動作中でない                     |
                        +-------------------------------------------------+

********************************** end of file ********************************
